package com.yinhe.system.service.impl;


import java.text.SimpleDateFormat;
import java.util.ArrayList;

import java.util.Calendar;
import java.util.Date;
import java.util.List;

import com.yinhe.common.annotation.DataScope;
import com.yinhe.common.core.domain.entity.SysUser;
import com.yinhe.common.core.domain.model.LoginUser;
import com.yinhe.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.yinhe.system.mapper.YhCalendarMapper;
import com.yinhe.system.domain.YhCalendar;
import com.yinhe.system.service.IYhCalendarService;

import static com.yinhe.common.utils.SecurityUtils.getLoginUser;
import static com.yinhe.module.xjy.utils.Xjyutils.convertStringToList;

/**
 * 日程Service业务层处理
 * 
 * @author yinhe
 * @date 2022-07-27
 */
@Service
public class YhCalendarServiceImpl implements IYhCalendarService 
{
    @Autowired
    private YhCalendarMapper yhCalendarMapper;

    /**
     * 查询日程
     * 
     * @param id 日程主键
     * @return 日程
     */
    @Override
    public YhCalendar selectYhCalendarById(Long id)
    {
        return yhCalendarMapper.selectYhCalendarById(id);
    }

    /**
     * 查询日程列表
     * 
     * @param yhCalendar 日程
     * @return 日程
     */
    @Override
    @DataScope(deptAlias = "yh_calendar", userAlias = "yh_calendar")
    public List<YhCalendar> selectYhCalendarList(YhCalendar yhCalendar)
    {
        // 获取当前登录用户
        LoginUser loginUser = getLoginUser();
        SysUser sysUser = loginUser.getUser();
        yhCalendar.setDeptId(sysUser.getDeptId());
        yhCalendar.setUserId(sysUser.getUserId());
        return yhCalendarMapper.selectYhCalendarList(yhCalendar);
    }
    /**
     * 查询共享日程列表
     *
     * @param yhCalendar 日程
     * @return 日程
     */
    @Override
    public List<YhCalendar> shareYhCalendarList(YhCalendar yhCalendar)
    {
        // 获取当前登录用户
        LoginUser loginUser = getLoginUser();
        SysUser sysUser = loginUser.getUser();
        //先查询所有日程列表
        List<YhCalendar>  result = yhCalendarMapper.shareYhCalendarList(yhCalendar);
        //存放处理后的日程列表
        ArrayList<YhCalendar> list = new ArrayList<>();
        for(YhCalendar item:result){
            //判断是否是公开的
            if(item.getIsPublic().equals("2")){
            //将string类型visibleRange字符串进行处理，存到list中，用当前用户的userid进行比较，查看是否在listVisibleRange中，存在，则再存到list中，传给前台
            String visibleRange = item.getVisibleRange();
            List listVisibleRange = convertStringToList(visibleRange,",");
            //注意这块比较的时候需要把int类型转换成string类型
                     if ((listVisibleRange.contains((sysUser.getUserId().toString()))||(sysUser.getUserId().equals(item.getUserId())))) {

                         list.add(item);
                     }
            }

        }

        return list;
    }



    /**
     * 新增日程
     * 
     * @param yhCalendar 日程
     * @return 结果
     */
    @Override
    public int insertYhCalendar(YhCalendar yhCalendar)
    {
        yhCalendar.setCreateTime(DateUtils.getNowDate());
        return yhCalendarMapper.insertYhCalendar(yhCalendar);
    }

    /**
     * 修改日程
     * 
     * @param yhCalendar 日程
     * @return 结果
     */
    @Override
    public int updateYhCalendar(YhCalendar yhCalendar)
    {
        yhCalendar.setUpdateTime(DateUtils.getNowDate());
        return yhCalendarMapper.updateYhCalendar(yhCalendar);
    }

    /**
     * 批量删除日程
     * 
     * @param ids 需要删除的日程主键
     * @return 结果
     */
    @Override
    public int deleteYhCalendarByIds(Long[] ids)
    {
        return yhCalendarMapper.deleteYhCalendarByIds(ids);
    }

    /**
     * 删除日程信息
     * 
     * @param id 日程主键
     * @return 结果
     */
    @Override
    public int deleteYhCalendarById(Long id)
    {
        return yhCalendarMapper.deleteYhCalendarById(id);
    }

    /**
     *@author admin
     *@Description 主页日期插件查询
     *@Date 15:38 2022/7/29
     *@Param   date
     *@Return   结果
     **/
    @Override
    public List<YhCalendar> searchEvents(Date date) {


        // 获取当前登录用户
        LoginUser loginUser = getLoginUser();
        SysUser sysUser = loginUser.getUser();
        //先查询所有日程列表
       List<YhCalendar>  result = yhCalendarMapper.selectTime();
        ArrayList<YhCalendar> events = new ArrayList<>();

        Calendar calendar=Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.HOUR,23);//时
        calendar.add(Calendar.MINUTE,59);//时
        calendar.add(Calendar.SECOND,59);//秒
        //结果集
        for (YhCalendar a:result){
            a.getStartTime();
            a.getEndTime();

            //判断用户id和部门id是否相同
            if (a.getUserId().equals(sysUser.getUserId())&&a.getDeptId().equals(sysUser.getDeptId())){
                //大于等于小于等于比较
                if ((a.getStartTime().before(calendar.getTime()) || a.getStartTime().equals(calendar.getTime()))&& (a.getEndTime().after(date)|| a.getEndTime().equals(date))){
                    List<YhCalendar> list =   yhCalendarMapper.selectEvent(a.getId());
                    for (YhCalendar b:list){
                        events.add(b);
                    }
                }
            }


        }

        return events;
    }
}
